import { SysMenuDto } from "@/models/System/SysMenuDto";

/**
 * 只适用于主题框架导航菜单数据转换以及常规操作
 */
export class NavMenuTree {

    /**
     * 二维表数据转换成JSON树形结构
     * @param data 
     * @param pid 
     * @returns 
     */
    static toJson(data: SysMenuDto.Base[], pid: number = 0) {
        let tree: SysMenuDto.NavMenuJson[] = [];
        let temp;
        for (let i = 0; i < data.length; i++) {
            if (data[i].parentId == pid) {
                let obj: SysMenuDto.NavMenuJson = {
                    key: data[i].id,
                    title: data[i].name,
                    icon: data[i].icon,
                    parentId: data[i].parentId,
                    url: data[i].url
                };
                temp = this.toJson(data, data[i].id);
                if (temp.length > 0) {
                    obj.children = temp;
                }
                tree.push(obj);
            }
        }
        return tree;
    }

    /**
     * 获取导航数据带有下级的id 用于手风琴模式
     * @param treeData 
     * @returns 
     */
    static getRootKey(treeData: SysMenuDto.NavMenuJson[], ids: any[] = []) {
        treeData.forEach(item => {
            if (item.children) {
                ids.push(item.key);
                this.getRootKey(item.children, ids);
            }
        })
        return ids;
    }

    /**
     * 获取上级所有ID
     * @param treeData 
     * @param id 当前id
     */
    static getParentKey(treeData: SysMenuDto.Base[], id: number) {

        let temp: number[] = [];

        ////先定义个函数寻找子节点位置 找到后 再找改节点父元素位置 以此类推
        const callback = function (nowData: SysMenuDto.Base[], nowPId: number) {
            for (var i = 0; i < nowData.length; i++) {
                let d = nowData[i];
                if (d.id == nowPId) {
                    temp.push(d.id);
                    callback(nowData, d.parentId);
                }
            }
        };
        callback(treeData, id);
        return temp;

    }
}